package battleco

import (
	"wails/schema/config/commonco"
	"wails/schema/enums/battleenum"
)

// @schema_export --ident=schema --json --config=行为
// @schema_go
// @cache_ts
// @alias 行为
type C行为 struct {
	// @alias 极性
	// 行为图标颜色
	J极性 battleenum.BehaviorAlignment

	// @alias 类别
	// 可用于在单位上启用或禁用某种行为的一种行为分类方法
	L类别 map[battleenum.BehaviorCategory]bool

	// @alias 图标
	T图标 string

	// @alias 名称
	// 行为的名称
	M名称 string

	// @alias 描述
	// 行为的描述说明
	M描述 string

	// 设置行为的主题，可用于过滤器搜索相同主题的行为
	// 例如某个技能会增强或清除指定[主题标签]的行为
	// @alias 别名
	B别名 map[string]string

	// @alias 启用验证器
	// 如果这些验证器中所有条件都符合，则该行为将被启用。
	Q启用验证器 map[string]string `link:"验证器"`

	// @alias 移除验证器
	// 如果这些验证器中有一个返回为假，则该行为将被移除。
	Y移除验证器 map[string]string `link:"验证器"`

	// @alias 消耗
	// 行为的费用参数。
	X消耗 *S消耗

	// @alias 初始效果
	// 当该行为被应用时所发生的效果
	C初始效果 string `link:"效果"`

	// @alias 启用效果
	// 当该行为被应用时所发生的效果
	C启用效果 string `link:"效果"`

	// @alias 禁用效果
	// 当该行为被急用时所发生的效果
	J禁用效果 string `link:"效果"`

	// @alias 最终效果
	// 当该行为被移除前所发生的效果。
	Z最终效果 string `link:"效果"`

	// @alias 响应
	X响应 map[string]string `link:"响应"`

	// @alias 创建表现
	C创建表现 map[string]string `link:"表现"`
}

// @schema_export --ident=schema --json --config=行为
// @schema_go
// @cache_ts
// @alias 行为_增益
type C行为_增益 struct {
	C行为

	// @alias 标旗_增益
	// 仅限于行为行为的标旗。
	B标旗_增益 map[battleenum.E增益行为标旗]bool

	// @废弃: 改用修正公式实现, 统一到属性值容易理解
	// 用于修改配置
	// @alias 加成组
	// CBonusLink
	J加成组 map[string]string `link:"加成"`

	// @alias 响应
	X响应 map[string]string `link:"响应"`

	// @alias 伤害响应
	// 控制具有该种行为的单位在受到伤害时会如何反应的参数。
	S伤害响应 *SDamageResponse

	// @alias 死亡响应
	S死亡响应 *SDeathResponse

	// @alias 闪避响应
	S闪避响应 *SDodgeResponse

	// @alias 终止效果
	// 每一层行为持续时间结束后所发生的效果。
	Z终止效果 string `link:"效果"`

	// @alias 周期效果
	// 每个周期所发生的效果。
	Z周期效果 string `link:"效果"`

	// @alias 刷新效果
	// 当该行为被重新应用时所发生的效果
	S刷新效果 string `link:"效果"`

	// @alias 持续时间
	// 该行为的持续时间，0表示永久
	// 默认只有一层的持续时间，时间结束后，行为从单位中移除。数量增加时，刷新【持续时间】
	// 设置【标旗】的【允许独立的持续时间】后，按照以下逻辑执行：
	// 【持续时间】结束后，行为的数量减少【终止递减数量】，并执行【终止效果】
	// 如果行为数量到达0，行为从单位中移除，并执行【最终效果】
	C持续时间 float64

	// 0-不会递减
	// @alias 终止递减数量
	Z终止递减数量 int

	// @alias 最大叠加数
	// 行为可在一个单位上叠加的最大次数
	Z最大叠加数 int

	// 每一个施法者所能叠加的最大计数
	// 该行为可在每一个施法者的单位上叠加的最大次数
	// @alias 施法者最大叠加数
	S施法者最大叠加数 int

	// @alias 周期
	// 在应用该行为后的重复间隔。该行为会在每一次间隔期间执行其周期性效果[PeriodicEffect]。
	// 在行为激活后的[Period]秒开始计数。
	Z周期 float64

	// @alias 周期计数
	// “周期性效果”可被执行的最大次数。-1 表示无限制。
	Z周期计数 int

	// @alias 控制玩家
	// 定义哪一名玩家会控制应用了该行为的单位。
	K控制玩家 *SEffectWhichPlayer

	// @alias 时间源
	// 定义应用到该行为上时间值的刻度。如果设为全局，则将会使用当前的全局时间刻度；如果设为“目标”或“施法者”，则该行为将会使用该查询所返回单位的时间刻度。
	S时间源 *SEffectWhichTimeScale

	// @alias 修正
	X修正 *S行为修正
}

type S行为修正 struct {
	// @alias 单位状态
	D单位状态 map[battleenum.D单位状态标旗]int
	// @alias 替换主武器
	T替换主武器 string `link:"武器"`
	// @alias 替换移动器
	T替换移动器 string `link:"移动器"`
	// 修正单位的单位属性
	// @alias 属性
	S属性 map[string]*commonco.X修正公式_属性
	// @alias 警戒范围
	J警戒范围 *commonco.X修正公式
}
